iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 20
2
自我挑戰組

vue.js 30天學習軌跡系列 第 20

Day20 vue.js - 使用 $emit 向外傳遞

  • 分享至 

  • xImage
  •  

前幾篇講到的都是父组件使用 prop 傳遞數據给子组件,
因此如果要透過子組件操作資料並異動父組件的話,這時就要透過 emit 事件通知父層。

demo

this.$emit('eventName',這個位子是可以加參數的)

點擊子組件監測到綁定 @click="addCounter"
並進入 addCounter function ,並使用$emit觸發自訂義事件
觸發 自定義事件之後 ,便執行綁在root之下的 v-on:increment="papaAdd"
最終執行 父層的 papaAdd function

<div id="app">
  <h2>透過 emit 向外傳遞資訊</h2>
  <hr>
  <h5>父層total : {{ total  }} </h5>
  <child v-on:increment="papaAdd"></child>
</div>

<script type="text/x-template" id="childTemplate">
  <div class="box">
    <button  @click="addCounter" >加 {{ counter }}</button>
    <input type="Number" v-model="counter">
  </div>
</script>
Vue.component('child', {
  template: '#childTemplate',
  data(){
    return{
      counter : 1
    }      
  },
  methods:{
    addCounter(){
       this.$emit('increment',Number(this.counter))
    },
  }
})
var app = new Vue({
  el: '#app',
  data: {
    total : 0
  },
  methods:{
    papaAdd(payload){
      this.total = this.total +  payload
    }
  }
});

圖解

/images/emoticon/emoticon08.gif


上一篇
Day19 vue.js - props(4)
下一篇
Day21 vue.js - 元件插槽Slot
系列文
vue.js 30天學習軌跡30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言